package cn.iocoder.yudao.module.nmkj.service.useraccess;

import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.*;
import cn.iocoder.yudao.module.nmkj.controller.admin.useraccess.vo.*;
import cn.iocoder.yudao.module.nmkj.dal.dataobject.useraccess.UserAccessDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 访客消息 Service 接口
 *
 * @author 芋道源码
 */
public interface UserAccessService {

    /**
     * 创建访客消息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createUserAccess(@Valid UserAccessSaveReqVO createReqVO);

    /**
     * 创建访客消息，给用户端使用，目的是保证创建的消息数据限制在每个访客给定一定发送消息的次数
     * @param createReqVO 创建信息
     * @param request 用于获取匿名访客的地域信息，限制在一定的安全用户范围内
     * @param response 用于返回 cookie
     * @return 编号
     */
    Long createUserAccess(@Valid UserAccessSaveReqVO createReqVO, HttpServletRequest request, HttpServletResponse response);

    /**
     * 更新访客消息
     *
     * @param updateReqVO 更新信息
     */
    void updateUserAccess(@Valid UserAccessSaveReqVO updateReqVO);

    /**
     * 删除访客消息
     *
     * @param id 编号
     */
    void deleteUserAccess(Long id);

    /**
     * 获得访客消息
     *
     * @param id 编号
     * @return 访客消息
     */
    UserAccessDO getUserAccess(Long id);

    /**
     * 获得访客消息分页
     *
     * @param pageReqVO 分页查询
     * @return 访客消息分页
     */
    PageResult<UserAccessDO> getUserAccessPage(UserAccessPageReqVO pageReqVO);

}